package com.suning.sawp.dto.common;

import com.suning.sawp.constants.ErrorCodeConstants;

import java.io.Serializable;
import java.util.Map;

/**
 * 给客户端返回接口，统一bean<br>
 * 〈功能详细描述〉
 *
 * @author 12061818
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public class ReturnMsg<T> implements Serializable {

    /**
     */
    private static final long serialVersionUID = 5699865103430619972L;

    public static final String FAIL = "0";

    public static final String SUCCESS = "1";
    /**
     * 接口标示，0-失败；1-成功
     */
    private String retFlag;

    /**
     * 失败原因码
     */
    private String errorCode = "";

    /**
     * 失败原因描述
     */
    private String errorMessage = "";

    /**
     * 业务字段
     */
    private T data;

    public ReturnMsg() {
        this.retFlag = SUCCESS;
    }

    public ReturnMsg(T obj) {
        this.retFlag = SUCCESS;
        this.data = obj;
    }

    public ReturnMsg(String retFlag, String errorMessage) {
        this.retFlag = retFlag;
        this.errorMessage = errorMessage;
    }

    public String getRetFlag() {
        return retFlag;
    }

    public void setRetFlag(String retFlag) {
        this.retFlag = retFlag;
    }

    public String getErrorCode() {
        return errorCode;
    }

    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public void setError(String errorCode) {
        this.retFlag = FAIL;
        this.errorCode = errorCode;
        this.errorMessage = ErrorCodeConstants.ERR_MAP.get(errorCode);
    }

    /**
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param errorCode
     * @param args
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setError(String errorCode, Object... args) {
        this.retFlag = FAIL;
        this.errorCode = errorCode;
        this.errorMessage = String.format(ErrorCodeConstants.ERR_MAP.get(errorCode), args);
    }

    /**
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param errorCode
     * @param errorMsg
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setError(String errorCode, String errorMsg) {
        this.retFlag = FAIL;
        this.errorCode = errorCode;
        this.errorMessage = errorMsg;
    }

    /**
     * 功能描述: <br>
     * 〈功能详细描述〉
     *
     * @param errorCode
     * @param errorMsg
     * @param args
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public void setError(String errorCode, String errorMsg, Object... args) {
        this.retFlag = FAIL;
        this.errorCode = errorCode;
        this.errorMessage = String.format(errorMsg, args);
    }

    public void setError(String errorCode, Map<String, String> errMap) {
        this.retFlag = FAIL;
        this.errorCode = errorCode;
        this.errorMessage = errMap.get(errorCode);
    }

    @Override
    public String toString() {
        return "ReturnMsg [retFlag=" + retFlag + ", errorCode=" + errorCode + ", errorMessage=" + errorMessage
                + ", data=" + data + "]";
    }

}
